
// 一个进度条插件
import { Button, notification, Space } from 'antd'


// 当前版本 qiankun 对 insertBefore 处理有问题，这里先使用修改后的本地包
import {
  registerMicroApps, // 注册子应用方法
  addGlobalUncaughtErrorHandler,  // 添加全局未捕获异常处理器
  start, // 启动qiankun
  setDefaultMountApp, // 设默认启用的子应用
  runAfterFirstMounted, // 有个子应用加载完毕回调
  //initGlobalState
} from "qiankun";

let props = {
  data: {
    token: '我知道token了  谢谢'
  },
  // emits,
  // GLOBAL
}


function getActiveRule(routerPerfix) {
  return location => location.pathname.startsWith(`${routerPerfix}`);
}


const appInit = ({ apps = [], el }) => {
  if (apps.length === 0) {
    notification['error']({
      message: '温馨提示',
      description:
        '没有可以注册的子应用数据',
    });
    return
  }

  let appData = []
  let defaultApp = ''
  //获取应用数据
  apps.forEach((item, index) => {
    appData.push({
      ...item,
      activeRule: getActiveRule(item.activeRule),
      container: el
    })
    if (index === 0) defaultApp = item.activeRule;
  });

  /**
     * 注册子应用
     * 第一个参数 - 子应用的注册信息
     * 第二个参数 - 全局生命周期钩子
     */
  registerMicroApps(appData, {
    // qiankun 生命周期钩子 - 加载前
    beforeLoad: (app) => {
      //NProgress.start();
      console.log("before load", app.name);
      return Promise.resolve();
    },
    // qiankun 生命周期钩子 - 挂载后
    afterMount: (app) => {
      //NProgress.done();
      console.log("after mount", app.name);
      return Promise.resolve();
    },
  });


  // 设置默认子应用
  if (!defaultApp) defaultApp = data[0].activeRule;
  //设置默认进入的子应用
  setDefaultMountApp(defaultApp)

  //微前端启动进入第一个子应用后回调函数
  runAfterFirstMounted(() => {
    console.log('[MainApp] first app mounted');
  });

  /**
   * 添加全局的未捕获异常处理器
   */
  addGlobalUncaughtErrorHandler(event => {
    console.error(event);
    const { msg } = event;
    // 加载失败时提示
    if (msg && msg.includes("died in status LOADING_SOURCE_CODE")) {
      message.error("子应用加载失败，请检查应用是否可运行");
    }
  });
  start()

  //appStore(initGlobalState)
}




// 导出 qiankun 的启动函数
export default appInit;